package com.ruoyi.project.module.zxm;

import com.ruoyi.project.module.zxm.entity.ProcessRequest;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


import javax.xml.stream.StreamFilter;
import java.io.*;
import java.util.List;

@RestController
@RequestMapping("/zxm/api")
public class FileWordController {
    // 文件上传接口

    @RequestMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
        // 根据实际需求，处理文件上传逻辑，例如保存文件到服务器，返回文件保存的路径等
        // 这里只是简单地将文件保存到本地的 /upload 目录下，并返回文件的保存路径
        String fileName = file.getOriginalFilename();
        String uploadDirectory = "D:\\home\\"; // 替换为您在服务器上设置的文件上传目录
        String filePath = uploadDirectory + fileName;

        File dest = new File(filePath);
        file.transferTo(dest);
        System.out.println(filePath+"45612");
        return filePath;
    }

    // 文件处理接口
    @RequestMapping("/process")
    public String processFile() throws IOException {
        // 根据实际需求，处理文件处理逻辑，例如读取Word文件、修改文件内容、将Word文件转换为PDF等
        // 这里只是简单地将Word文件内容替换为请求中的新文本，并返回文件保存的路径
        System.out.println("我走了");
        ProcessRequest request = new ProcessRequest();
        request.setFilePath("D:\\home\\test.docx");
        String filePath = request.getFilePath();
        String newText = request.getNewText();
        FileInputStream fis = new FileInputStream(filePath);
        XWPFDocument document = new XWPFDocument(fis);
        System.out.println(document+"pp");
        for (XWPFParagraph paragraph : document.getParagraphs()) {
            String paragraphText = paragraph.getParagraphText();
            System.out.println(paragraphText+"1oo");
            if (paragraphText.contains("Hello world")) {
                        XWPFRun newRun = paragraph.createRun();
                        newRun.setText("新增的文本内容");
                         //可以设置新文本的样式，如字体、颜色、大小等
                         newRun.setFontFamily("宋体");
                         newRun.setColor("FF0000");
                         newRun.setFontSize(12);
                        paragraph.addRun(newRun);
                }
//            for (XWPFRun run : runs) {
//                if (run.getCTR().sizeOfTArray() > 0) {
//                    String text = run.getText(0);
//                    if (paragraph.getText().contains("Hello world")) {
//                        XWPFRun newRun = paragraph.createRun();
//                        newRun.setText("新增的文本内容");
//                        // 可以设置新文本的样式，如字体、颜色、大小等
//                        // newRun.setFontFamily("宋体");
//                        // newRun.setColor("FF0000");
//                        // newRun.setFontSize(12);
//                        paragraph.addRun(newRun);
//                    }
//                }
//            }
        }
        fis.close();
        FileOutputStream fos = new FileOutputStream(filePath);
        document.write(fos);
        fos.close();
        return filePath;
    }

    // 文件下载接口
    @GetMapping("/download")
    public ResponseEntity<?> downloadFile(@RequestParam("filePath") String filePath) throws IOException {
        // 根据实际需求，处理文件下载逻辑，例如从服务器读取文件，并返回给前端
        // 这里只是简单地读取文件，并将文件内容以文件流的形式返回给前端
        File file = new File(filePath);
        InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
        return ResponseEntity.ok()
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .contentLength(file.length())
                .body(resource);
    }

    //将docx文件转成pdf
    @RequestMapping("/transposrt")
    public String transposrt() throws IOException {

        String inputFile = "D:\\home\\test.docx"; // 输入的.docx文件路径
        String outputFile = "D:\\home\\test.pdf"; // 输出的.pdf文件路径

//        File file = new File(inputFile);
//        FileInputStream fis = new FileInputStream(file);
//        XWPFDocument document = new XWPFDocument(fis);

        XWPFDocument doc = new XWPFDocument(new FileInputStream("D:\\home\\test.docx"));// docx
        // 创建输出流
        FileOutputStream fos = new FileOutputStream(outputFile);

        PdfOptions options = PdfOptions.create();
       // 将 .docx 转换为 .pdf
        PdfConverter.getInstance().convert(doc, fos, options);

        // 关闭输出流
        fos.close();

        System.out.println("转换完成");


        return null;
    }
}
